package com.dtx.iterator.shushang;

import com.dtx.iterator.gongyongde.Aggregate;
import com.dtx.iterator.gongyongde.Book;
import com.dtx.iterator.gongyongde.Iterator;


/**
 * BookShelf类时表示书架的类。由于需要将该类作为集合进行处理,因此它实现了Aggregate接口。代码中的implements Aggregate
 * 部分即表示这一点。此外,请注意在BookShelf类中还实现了Aggregate接口的iterator方法。
 *
 * 这个书架中定义了books字段,它是Book类型的数组。该数组的大小(maxsize)在生成BookShelf的实例时被指定了。
 * 之所以将books字段的可见性设置为private,是为了防止外部不小心改变了该字段的值.
 *
 * 接下来我们看看iterator方法。该方法会生成并返回BookShelfIterator类的实例作为BookShelf类对应的Iterator。
 * 当外部想要遍历书架时,就会调用这个方法。
 */
public class BookShelf implements Aggregate {

    private Book[] books;

    public int last = 0;

    public BookShelf(int maxsize){
        this.books = new Book[maxsize];
    }

    public Book getBookAt(int index){
        return books[index];
    }

    public void appendBook(Book book){
        this.books[last] = book;
        last++;
    }

    public int getLength(){
        return last;
    }

    @Override
    public Iterator iterator() {
        return new BookShelfIterator(this);
    }
}
